/*
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package bean;

import dao.AplOperadorDao;
import dao.AplOperadorDaoImpl;
import java.awt.event.ActionEvent;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.servlet.http.HttpSession;
import model.AplModulo;
import model.AplOperador;
import org.primefaces.context.RequestContext;
import util.MyUtil;

@Named(value="loginBean")
@SessionScoped
public class loginBean implements Serializable {

    private AplOperador aplOperador;
    private final AplOperadorDao aplOperadorDao;
    private List<AplModulo> aplModulos;
    
    private Object persistentFacesState;
    private AplOperador aplOperadorb;
    private List<AplOperador> aplOperadors;
    
    public loginBean() {
        this.aplOperadorDao = new AplOperadorDaoImpl();
        if (this.aplOperador == null) {
            this.aplOperador = new AplOperador();
        }
    }

    public static loginBean getInstancia() {
        return null;
    }
    
    public AplOperador getAplOperador() {
        return aplOperador;
    }

    public void setAplOperador(AplOperador aplOperador) {
        this.aplOperador = aplOperador;
    }

    public void login(ActionEvent actionEvent) throws Exception {
        RequestContext contex = RequestContext.getCurrentInstance();
        
        FacesMessage msg;
        boolean loggedIn;
        String ruta = "";
        aplOperador.setId_agencia(MyUtil.id_agencia());
        
        this.aplOperador = this.aplOperadorDao.findByUsuario(aplOperador);

        if (aplOperador.getId_error() == 1) {

            loggedIn = true;

            
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("id_agencia", this.aplOperador.getId_agencia());
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuario", this.aplOperador.getUsuario());
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("nombres", this.aplOperador.getNombres());
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("apellidos", this.aplOperador.getApellidos());
//            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("firma_mecanica", this.aplOperador.getFirma_mecanica());
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("correo_email", this.aplOperador.getCorreo_email());
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("fec_ini_trabajo", this.aplOperador.getFec_ini_trabajo());
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("fec_desde", this.aplOperador.getFec_desde());
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("fec_hasta", this.aplOperador.getFec_hasta());
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("fec_ult_acceso", this.aplOperador.getFec_ult_acceso());
            
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bienvenido",
                     this.aplOperador.getNombres() + " " + this.aplOperador.getApellidos());
            ruta = MyUtil.baselogin() + "pages/inicio.xhtml";
            
//            AplOperadorDao aplOperadorDao = new AplOperadorDaoImpl();
//                this.aplOperadors = new ArrayList<>();
                aplOperadorDao.create(aplOperador);

        } else {
            if (aplOperador.getId_error() == 2) {
                loggedIn = true;
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Para poder trabajar debe a cambiar clave",
                        this.aplOperador.getNombres() + " " + this.aplOperador.getApellidos());
                ruta = MyUtil.baseadmon() + "cambioclave.xhtml";
                // llamar menu vambio contraseña
            } else {
                if (aplOperador.getId_error() == 3) {
                    loggedIn = false;
                    msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "No esta autirizado para trabajar en este horario",
                            this.aplOperador.getNombres() + " " + this.aplOperador.getApellidos());
                } else {
                    loggedIn = false;
                    msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error", "Usuario y/o Clave no son validos");
                }
                if (this.aplOperador == null) {
                    this.aplOperador = new AplOperador();
                }
            }
        }

        FacesContext.getCurrentInstance().addMessage(null, msg);
        contex.addCallbackParam("loggedIn", loggedIn);
        contex.addCallbackParam("ruta", ruta);

    }

    public void logout() {
        String ruta = MyUtil.baseurl() + "login.xhtml";
        RequestContext sesion = RequestContext.getCurrentInstance();
        FacesContext facesContext = FacesContext.getCurrentInstance();

        HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
        session.invalidate();

        sesion.addCallbackParam("loggetOut", true);
        sesion.addCallbackParam("ruta", ruta);
    }
    
//    public String getStrSHA(String message, String algorithm) {
//        byte[] digest = null;
//        byte[] buffer = message.getBytes();
//        try {
//            MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
//            messageDigest.reset();
//            messageDigest.update(buffer);
//            digest = messageDigest.digest();
//        } catch (NoSuchAlgorithmException ex) {
//            System.out.println("Error al incriptar clave");
//        }
//        return toHexadecimal(digest);
//    }
}